<?php
/**
 * Representa un archivo fisico
 *
 * @author del Valle, Federico <quaidy@gmail.com>
 */
class archivo {
   protected $ruta;
   protected $link = null;

   /**
    * Por default si hay contenido y no se especifica un modo, se sobreescribe
    *
    * @param String $ruta
    * @param String $contenido
    * @param String $modo
    */
   public function  __construct($ruta,$contenido="",$append ="") {
     $this->ruta = $ruta;
     if (!empty($contenido)) {
       if (empty($modo)) {
         $fh = fopen($this->ruta,"w");
         fwrite($fh, $contenido);
         fclose($fh);
       }
     }
   }

   /**
    * Abre el archivo
    *   - Si nose especifica el modo, se abre para escritura.
    *
    * @param String $modo a,w,r ...
    */
   public function abrir($modo="w") {
     $this->link = fopen($this->ruta,$modo);
   }

   /**
    * Agrega contenido al archivo (append)
    * 
    * @param String $contenido
    */
   public function adjuntar($contenido) {
     if ($this->link == null) {
       $this->abrir("a");
     }
     fwrite($this->link,$contenido);
   }

   /**
    * Traer una porcion o todo el archivo
    *
    * @param int $inicio byte desde el cual se va a empezar a traer
    * @param int $tamaño tamaño que se va a traer
    * @return string
    */
   public function get_contenido($inicio = null, $tamaño =null) {

     if (!empty($inicio) && !empty($tamaño)) {
        return file_get_contents($this->ruta,null,null,$inicio,$tamaño);
     } else {
        return file_get_contents($this->ruta);
     }
   }

   /**
    * Devuelve la ruta del archivo
    *
    * @return String  ruta del archivo
    */
   public function get_ruta() {
     return $this->ruta;
   }

   /**
    * Copia el archivo a el destino
    *  - Si el destino existe se sobreescribe
    * 
    * @param String $destino
    * @return Boolean
    */
   public function copiar_en($destino) {
     return copy($this->ruta, $destino);
   }

   /**
    * Mueve el archivo al destino
    *
    * @param String $destino
    * @return Boolean
    */
   public function mover_a($destino) {
     if (rename($$this->ruta, $destino)) {
       $this->ruta = $destino;
       return true;
     } else {
       return false;
     }
   }

   /**
    * Cerramos el archivo
    */
   public function __destruct() {
     if (!empty($this->link)) {
       fclose($this->link);
     }
   }
}
?>
